package edu.uoc.tds.pec4.mantenimiento.controller;

import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;
import java.sql.SQLException;
import java.text.Format;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JOptionPane;

import edu.uoc.tds.pec4.beans.Aula;
import edu.uoc.tds.pec4.common.MantenimientoInterface;
import edu.uoc.tds.pec4.i18n.TDSLanguageUtils;

public class ControladorAula {
	
	private static MantenimientoInterface enlaceRemoto = null;
	private final static String url = new String("//localhost/TURVA1");

	
	public ControladorAula() {
		// TODO Auto-generated constructor stub
		try {
			enlaceRemoto = (MantenimientoInterface)Naming.lookup(url);
		} catch (MalformedURLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (RemoteException e) {
			JOptionPane.showMessageDialog(null, TDSLanguageUtils.getMessage("cliente.error.conectar"), TDSLanguageUtils.getMessage("cliente.error.titulo"), 0);
			e.printStackTrace();
		} catch (NotBoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}        
	}	
	
	
	public static  List<String[]> getlAulas(String filtro) throws SQLException, Exception{
		try {
			enlaceRemoto = (MantenimientoInterface)Naming.lookup(url);
		} catch (MalformedURLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (RemoteException e) {
			JOptionPane.showMessageDialog(null, TDSLanguageUtils.getMessage("cliente.error.conectar"), TDSLanguageUtils.getMessage("cliente.error.titulo"), 0);
			e.printStackTrace();
		} catch (NotBoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		List<Aula> lAulas =  enlaceRemoto.listaAulas(filtro);	
		
		List<String[]> listadoAulas = new ArrayList<String[]>();	
		      for(Aula e: lAulas){ 
		    	    Format formatter = new SimpleDateFormat("dd-MM-yyyy");
		        	String[] registro= new String[6];		        	
		        	registro[0] = Integer.toString(e.getIdAula());
		        	registro[1] = e.getNombre();		        	 
		        	registro[2] = "" + e.getCapacidad();    
		        	registro[3] = e.getLocalizacion();
		        	registro[4] = formatter.format(e.getFechaAlta());   
		        	if(e.getFechaBaja() != null) {
		        		registro[5] = formatter.format(e.getFechaBaja());
		        	}		        		       	
		        	listadoAulas.add(registro);			    	  
				}		
		return listadoAulas;
	}
	
	public static boolean altaAula(Aula aula) throws RemoteException, SQLException, Exception{
		int rdo = 0;
		try {
			enlaceRemoto = (MantenimientoInterface)Naming.lookup(url);
		} catch (MalformedURLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (RemoteException e) {
			JOptionPane.showMessageDialog(null, TDSLanguageUtils.getMessage("cliente.error.conectar"), TDSLanguageUtils.getMessage("cliente.error.titulo"), 0);
			e.printStackTrace();
		} catch (NotBoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		rdo = enlaceRemoto.altaAula(aula);
		if(rdo == 1)
			return true;
		else
			return false;
	}
	
	public static boolean bajaAula(int idAula) throws RemoteException, SQLException, Exception{
		int rdo = 0;
		try {
			enlaceRemoto = (MantenimientoInterface)Naming.lookup(url);
		} catch (MalformedURLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (RemoteException e) {
			JOptionPane.showMessageDialog(null, TDSLanguageUtils.getMessage("cliente.error.conectar"), TDSLanguageUtils.getMessage("cliente.error.titulo"), 0);
			e.printStackTrace();
		} catch (NotBoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		rdo = enlaceRemoto.bajaAula(idAula);
		if(rdo == 1)
			return true;
		else
			return false;
	}
	
	public static boolean devolverVigenciaAula(int idAula) throws RemoteException, SQLException, Exception{
		int rdo = 0;
		try {
			enlaceRemoto = (MantenimientoInterface)Naming.lookup(url);
		} catch (MalformedURLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (RemoteException e) {
			JOptionPane.showMessageDialog(null, TDSLanguageUtils.getMessage("cliente.error.conectar"), TDSLanguageUtils.getMessage("cliente.error.titulo"), 0);
			e.printStackTrace();
		} catch (NotBoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		rdo = enlaceRemoto.devolverVigenciaAula(idAula);
		if(rdo == 1)
			return true;
		else
			return false;
	}		
		
	public static boolean modificarAula(Aula aula) throws RemoteException, SQLException, Exception{		
		int rdo = 0;
		try {
			enlaceRemoto = (MantenimientoInterface)Naming.lookup(url);
		} catch (MalformedURLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (RemoteException e) {
			JOptionPane.showMessageDialog(null, TDSLanguageUtils.getMessage("cliente.error.conectar"), TDSLanguageUtils.getMessage("cliente.error.titulo"), 0);
			e.printStackTrace();
		} catch (NotBoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		rdo = enlaceRemoto.modificarAula(aula);
		if(rdo == 1)
			return true;
		else
			return false;
	}	
	
	public static Aula getAula(int idAula) throws RemoteException, SQLException, Exception{
		
		try {
			enlaceRemoto = (MantenimientoInterface)Naming.lookup(url);
		} catch (MalformedURLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (RemoteException e) {
			JOptionPane.showMessageDialog(null, TDSLanguageUtils.getMessage("cliente.error.conectar"), TDSLanguageUtils.getMessage("cliente.error.titulo"), 0);
			e.printStackTrace();
		} catch (NotBoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return enlaceRemoto.getAula(idAula);		
	}	
	

}
